package com.SuanFa.jiangdongqi.LiKou200;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。
 * 岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
 * 此外，你可以假设该网格的四条边均被水包围。
 * 示例 1：
 * 输入：grid = [
 * ["1","1","1","1","0"],
 * ["1","1","0","1","0"],
 * ["1","1","0","0","0"],
 * ["0","0","0","0","0"]
 * ]
 * 输出：1
 * 示例 2：
 * 输入：grid = [
 * ["1","1","0","0","0"],
 * ["1","1","0","0","0"],
 * ["0","0","1","0","0"],
 * ["0","0","0","1","1"]
 * ]
 * 输出：3
 * m == grid.length
 * n == grid[i].length
 * 1 <= m, n <= 300
 * grid[i][j] 的值为 '0' 或 '1'
 */
public class aaa {
//    int [] x;
//
//    List<List<Integer>> lists = new ArrayList<>();
//
//    public void subsets(int[] nums) {
//        x = new int[nums.length];
//        dfs(nums,0);
//    }
//    private void check(int[] x ,int [] nums) {
//        List<Integer> list= new ArrayList<>();
//        for (int i = 0; i < nums.length; i++) {
//            if (x[i]==1){
//                list.add(nums[i]);
//            }
//        }
//        lists.add(list);
//    }
//
//    private void dfs(int[] nums, int i) {
//        if (i>=nums.length){
//            check(x,nums);
//        }else {
//            x[i] = 1;
//            dfs(nums,i+1);
//            x[i] = 0;
//            dfs(nums,i+1);
//        }
//
//    }

    public int numIslands(char[][] grid) {
        int len0 = grid.length;
        int len1 = grid[0].length;
        int result = 0;
        for (int i = 0; i < len0; i++) {
            for (int j = 0; j < len1; j++) {
                if (grid[i][j] == '1') {
                    result++;
                    changeLand(grid, i, j);
                }
            }
        }
        return result;
    }

    private void changeLand(char[][] chars, int i, int j) {
        if (i < 0 || j < 0 || i >= chars.length || j >= chars[0].length || chars[i][j] == '0') {
            return;
        }
        chars[i][j] = '0';
        changeLand(chars, i + 1, j);
        changeLand(chars, i - 1, j);
        changeLand(chars, i, j + 1);
        changeLand(chars, i, j - 1);
    }

}
